#pragma once

#include "iostream"
#include "vector"
#include "algorithm"
#include "unordered_map"

using namespace std;

/*HJJ QQ479287006
 * nums[i] + c * space
  [3,7,8,1,1,5],  space = 2*




  1,3,5,7,9,... 这些位置的目标。
 * */
int destroyTargets(vector<int> &nums, int space) {

    int maxV = 0;
    int minV = nums[0];
    unordered_map<int, int> mp;
    for (int i = 0; i < nums.size(); ++i) {

        int count = 0;

        for (int j = 0; j < nums.size(); ++j) {

            if ((nums[j] - nums[i]) % space == 0) {
                mp[nums[i]] = nums[j];
                count++;
            }

        }

        if (count == maxV && minV > nums[i]) {
            minV = nums[i];
        }

        if (count > maxV) {
            maxV = count;
            minV = nums[i];
        }

    }

    return minV;
}


//我是发现那个%号了但是确实 没法这个规律
int destroyTargets(vector<int> &w, int space) {

    //其实就是一个等差数列 你发现了没 然后就是等差数列%那个间隔似乎都是一个数

    // res + c1*space == nums[i]
    // res + c2*space == nums[j]
    // res % space == nums[i] % space
    // res % space == nums[j] % space
    // nums[i]和nums[j]在同一个等差数列中需要满足: nums[i] % space == nums[j] % space
    // 这个意思是 他俩在一个等差数列里面 然后%就相同了
    unordered_map<int, int> hash;
    sort(w.begin(), w.end());
    for (int i = 0; i < w.size(); i++) {
        hash[w[i] % space]++;
    }
    int k = 0;//记录当前最多摧毁的数量
    int i = 0;//记录摧毁最多的机器编号
    for (auto a:w) {
        if (k < hash[a % space])//因为要最小,我们是从小到大排序的,所以不要给=
        {
            k = hash[a % space];//记录当前摧毁最多的数量
            i = a;//记录编号
        }
    }
    return i;

}